/*
连接mongoDB数据库，做CRUD操作：
 * 增：C（Create）
 * 删：D（Delete）
 * 改：U（Update）
 * 查：R（Retrieve）
*/

//1.连接数据库
const { MongoClient } = require("mongodb");
// const MongoClient = mongodb.MongoClient;

//连接mongoDB
MongoClient.connect("mongodb://localhost:27017", async (err, client) => {
  if (err) throw err; //throw自带return
  // 连接数据库，无则自动创建
  let db = client.db("h52005");
  //找到数据库h51911中的集合song
  let col = db.collection("song");

  //增删改查写在这里
  let song = [
    {
      id: 1,
      name: "月亮代表我的心",
    },
    {
      id: 2,
      name: "我心依旧",
    },
    {
      id: 3,
      name: "涛声依旧",
    },
    {
      id: 4,
      name: "匆匆那年",
    },
  ];
  //1.增  C（Create）
  let result66 = await col.insertMany(song); //接收的参数必须是数组  [{}]
  console.log(result66); //modifiedCount

  //2.查 R（Retrieve）

  //不写查询条件：查询所有数据
  //   let arr = await col.find().toArray();
  //   arr.then((res) => {
  //     console.log(res);
  //   });
  //   console.log(arr); //返回的是promise对象

  //查询：id等于2的歌曲
  //   let arr = await col
  //     .find({
  //       id: 2,
  //     })
  //     .toArray();
  //   console.log(arr);

  //查询：id大于2的歌曲
  //   let arr = await col
  //     .find({
  //       id: {
  //         $gt: 2,
  //       },
  //     })
  //     .toArray();
  //   console.log(arr);

  //查询id为1或id为3内的歌曲:$in
  //   let arr = await col
  //     .find({
  //       id: {
  //         $in: [1, 3, 5],
  //       },
  //     })
  //     .toArray();
  //   console.log(arr);

  //查询id为2同时歌名为"我心依旧"的数据 且 &&
  //   let arr = await col
  //     .find({
  //       id: 2,
  //       name: "我心依旧",
  //     })
  //     .toArray();
  //   console.log(arr);

  //查询id为3或歌名为 "我心依旧"的数据: $or
  //   let arr = await col
  //     .find({
  //       $or: [
  //         {
  //           id: 3,
  //         },
  //         {
  //           name: "我心依旧",
  //         },
  //       ],
  //     })
  //     .toArray();
  //   console.log(arr);

  //查询1<id<3的歌曲:$lt $gl
  //   let arr = await col
  //     .find({
  //       id: {
  //         $gt: 1,
  //         $lt: 3,
  //       },
  //     })
  //     .toArray();
  //   console.log(arr);

  //对id进行排序 降序
  //   let arr = await col.find().sort({ id: -1 }).toArray();
  //   console.log(arr);

  /*
    分页查询：page 当前页； pagesize 每页多少条
        limit(index,pagesize)  mysql语句;从下标index开始往后截取pagesize条数据
        limit(0,5) 

        page  pagesize  index
        1     10        0
        2     10        10
        3     10        20

        index=(page-1)*pagesize

        limit(pagesize).skip(index) mongodb
  */
  //查找第一页数据，每页2条
  //   let pagesize = 2;
  //   let page = 1;
  //   let index = (page - 1) * pagesize;
  //   let arr = await col
  //     .find()
  //     .limit(pagesize)
  //     .skip(index)
  //     .sort({ id: -1 })
  //     .toArray();
  //   console.log(arr);

  //需求：查找红色连衣裙，价格在 200-1000,降序输出
  //   let arr = await col
  //     .find({
  //       name: /红色连衣裙/,
  //       price: {
  //         $gt: 200,
  //         $lt: 1000,
  //       },
  //     })
  //     .limit(pagesize)
  //     .skip(index)
  //     .sort({ price: -1 })
  //     .toArray();
  //   console.log(arr);

  //删：D（Delete）
  //   let result = await col.deleteMany({ id: 2 });
  //   console.log(result); //deletedCount 不为零就是删除成功
  //   if(result.deletedCount) {
  //       //删除成功

  //   }else{

  //   }

  //改：U（Update）
  let result = await col.updateMany(
    { id: 3 },
    { $set: { name: "老鼠爱大米" } }
  );
  console.log(result); //upsertedCount

  client.close(); //关闭数据库，释放资源
});
